package cn.edu.sgu.www.mhxysy.service.chongwu_equipment;

import cn.edu.sgu.www.mhxysy.dto.chongwu_equipment.ChongwuEquipmentDTO;
import cn.edu.sgu.www.mhxysy.entity.chongwu_equipment.ChongwuEquipment;
import cn.edu.sgu.www.mhxysy.pager.Pager;
import cn.edu.sgu.www.mhxysy.vo.chongwu_equipment.ChongwuEquipmentVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author 沐雨橙风ιε
 * @version 1.0
 */
public interface ChongwuEquipmentService {

    /**
     * 一键计算并修改宠物装备评分
     * @param equipmentId 宠物装备ID
     */
    void compute(String equipmentId);

    /**
     * 穿戴/取下宠物装备
     * @param chongwuId 宠物ID
     * @param equipmentId 宠物装备ID
     */
    @Transactional(rollbackFor = Exception.class)
    void wear(String chongwuId, String equipmentId);

    /**
     * 添加宠物装备
     * @param chongwuEquipmentDTO 宠物装备信息
     */
    @Transactional(rollbackFor = Exception.class)
    void insert(ChongwuEquipmentDTO chongwuEquipmentDTO);

    /**
     * 通过ID删除宠物装备
     * @param equipmentId 宠物装备ID
     */
    @Transactional(rollbackFor = Exception.class)
    void deleteById(String equipmentId);

    /**
     * 通过ID修改宠物装备信息
     * @param chongwuEquipmentDTO 宠物装备信息
     */
    @Transactional(rollbackFor = Exception.class)
    void updateById(ChongwuEquipmentDTO chongwuEquipmentDTO);

    /**
     * 查询全部宠物装备
     * @return List<ChongwuEquipment>
     */
    List<ChongwuEquipment> selectAll();

    /**
     * 通过ID查询宠物装备信息
     * @param id 宠物装备ID
     * @return ChongwuEquipment
     */
    ChongwuEquipment selectById(String id);

    /**
     * 查询宠物装备总评分
     * @param equipmentId 宠物装备ID
     * @return Integer 宠物装备的总评分
     */
    Integer getTotalScore(String equipmentId);

    /**
     * 分页条件宠物装备列表
     * @param pager 分页参数
     * @return Page<ChongwuEquipment>
     */
    Page<ChongwuEquipment> selectByPage(Pager<ChongwuEquipment> pager);

    /**
     * 查询宠物已穿戴的宠物装备
     * @param chongwuId 宠物ID
     * @return List<ChongwuEquipmentCategoryVO>
     */
    List<ChongwuEquipmentVO> getWeardEquipments(String chongwuId);

    /**
     * 查询宠物装备列表
     * @param type 宠物装备类型
     * @param roleId 角色ID
     * @param chongwuId 宠物ID
     * @return List<ChongwuEquipment>
     */
    List<ChongwuEquipment> selectList(Integer type, String roleId, String chongwuId);
}